#include <iostream>
#include <unistd.h>
#include <signal.h>

using namespace std;

void PrintPending(sigset_t pending)
{

    for(int signo = 31;signo>=1;signo--)
    {
        if(sigismember(&pending,signo))//判断信号是否在pending表中
        {
            cout<<"1";
        }
        else
        {
            cout<<"0";
        }
    }
    cout<<"\n\n";
}
int main()
{
    cout<<getpid()<<endl;
    sigset_t bset,oset;
    sigemptyset(&bset);
    sigemptyset(&oset);
    for(int i = 1;i<=31;i++)
    {
        sigaddset(&bset,i);
    }
    sigprocmask(SIG_SETMASK,&bset,&oset);//当前线程的 block 表替换成 bset 这个集合，同时把原来的 block 表备份到 oset 里。
    
    sigset_t pending; //设置pending位图
    while(true)
    {
       
        //获取pending表
        int n  = sigpending(&pending);
        if(n<0)
        {
            continue;
        }
        PrintPending(pending);
        sleep(1);
    }
    return 0;

}